<?php 

//bajar a una carpeta anterior:
//include '/carpeta/archivo.php';  

//entrar en una carpeta paralela:
//include './nuevo_registro/Asignar_pedido.php';

//Subir a una carpeta hija
//include 'carpeta/archivo.php'; o como en una carpeta paralela

include_once '/buscar_registro/Buscar_Usuario.php';
include_once '/buscar_registro/Buscar_Empleado.php';
include_once '/buscar_registro/Buscar_UserPc.php';

include_once '/nuevo_registro/Asignar_pedido.php';
include_once '/eliminar_registro/Eliminar_Pedido.php';
include_once '/modificar_registro/Modificar_Pedido.php';

include_once '/nuevo_registro/NuevoUsuario.php';
include_once '/nuevo_registro/NuevoEmpleado.php';
include_once '/nuevo_registro/NuevoUserPc.php';

include_once '/eliminar_registro/EliminarUsuario.php';
include_once '/eliminar_registro/EliminarEmpleado.php';
include_once '/eliminar_registro/EliminarUserPc.php';

include_once '/Configuracion_sucursal.php';

//Management System Facade

class SGF{
  
  //	private $Calendario;
  	private $config;
 	private $fecha_actual;
 	private $fecha_pedido;
	private $hora_pedido;
	private $usuario;
	private $empleado;
	private $empleados; //Array de empleados
	private $userPc;
	private $pedido;
	
	private $gestionAsignarPedido;
	private $gestionModificarPedido;
	private $gestionEliminarPedido;

	private $gestionUsuario;
	private $gestionEmpleado;
	private $gestionUserPc;

	
//_______________________BUSQUEDA DE DATOS COMUNES______________________
// 	En esta etapa se busca y devuelve toda la informacion que sea comun a cualquier proceso:
// 	- La informacion completa del usuario que solicito el pedido.
	
	public function __construct($sucursal){ //id_sucursal
		$this->config= new Configuracion_sucursal($sucursal);
	}
	
	public function get_fecha_actual(){
		return $this->config->get_fecha_actual();
	}

	public function get_usuario(){
		return $this->usuario;
	}
	
	public function get_empleado(){
		return $this->empleado;
	}
	
	public function get_userPc(){
		return $this->userPc;
	}
	
	public function get_empleados(){
		return $this->empleados;
	}
	
	public function get_pedido(){
		return $this->pedido;
	}
	
	//___BUSQUEDA DE USUARIO___
	public function buscar_usuario($id_busqueda, $tipo_de_dato){
		$busqueda= new Buscar_usuario($id_busqueda, $tipo_de_dato);
		$this->usuario =$busqueda->get_usuario_encontrado();
		return isset($this->usuario);///// esto no deberia estar, el usuario deberia recuperarse por get_usuario
	}	
	
	//___BUSQUEDA DE EMPLEADO___
	public function buscar_empleado($id_busqueda, $tipo_de_dato){
		$busqueda=new Buscar_Empleado($id_busqueda, $tipo_de_dato);
		$this->empleado= $busqueda->get_empleado_encontrado();
	}
	
	//___BUSQUEDA DE UserPC___
	public function buscar_userPc($id_busqueda, $tipo_de_dato){
		$busqueda=new Buscar_UserPc($id_busqueda, $tipo_de_dato);
		$this->userPc= $busqueda->get_userPc_encontrado();
	}
	
	//___BUSQUEDA DE PEDIDO___
	///solo buscar el ultimo pedido de un usuario o un pedido por nro_pedido
	public function buscar_pedido($id_busqueda, $tipo_de_dato, $fecha_pedido, $hora_pedido){ // [nro_pedido, nro_usuario, dni_usuario]
		$busqueda=new Buscar_pedido($id_busqueda, $tipo_de_dato, $fecha_pedido, $hora_pedido);
		$this->pedido= $busqueda->get_pedido_encontrado();
		$this->usuario= $busqueda->get_usuario_encontrado();
	}
	
	//_____________________NUEVO PEDIDO_____________________________________
	
	//Requiere haber buscado al usuario correspondiente previamente. 
	
	//___PRIMERA ETAPA DE NUEVO PEDIDO___
		//realiza la busqueda de empleados para asignar el pedido y los guarda como array de empleados. 
		//Se debe indicar la sucursal en la cual se quiere realizar el pedido
	public function nuevoPedido($fecha_pedido,$hora_pedido, $especialedad, $prioridad, $otraSucursal)	{
	  $this->gestionAsignarPedido=new Asignar_Pedido($this->usuario, $fecha_pedido, $hora_pedido, $especialedad, $prioridad, $this->config, $otraSucursal); //0 si es la local, nro de sucursal en otro caso 
	  $this->empleados=$this->gestionAsignarPedido->get_lista_empleados();	  
	}
	
	
	//___CONFIRMAR NUEVO PEDIDO___
	public function  confirmarNuevoPedido($empleado_asignado){ //es un entero, correspondiente a la posicion del empleado en la lista
		$nro_nuevo_pedido=$this->gestionAsignarPedido->confirmar($empleado_asignado);		
		if(is_numeric($nro_nuevo_pedido)) {
	        return $nro_nuevo_pedido;
	   	 } else {
	        return false;
	   	}
		unset($this->gestionAsignarPedido);
		$this->vaciarVariables();
	}


//_____________________MODIFICAR PEDIDO_________________________________
	
	//___PRIMERA ETAPA DE MODIFICAR PEDIDO___
	public function modificarPedido(){
		$this->gestionModificarPedido=new Modificar_pedido($id_busqueda, $tipo_de_dato);  //tipo_de_dato=[nro_pedido,/nro_usuario/dni_usuario]
		$this->pedido=$this->gestionEliminarPedido->get_pedido();
		$this->usuario=$this->gestionEliminarPedido->get_usuario();
		$this->empleado=$this->gestionEliminarPedido->get_empleado();
	}
	
	//___COMENZAR MODIFICACION___
	public function set_cambios($nueva_fecha_pedido, $nueva_hora_pedido){
		$this->gestionModificarPedido->set_cambios($nueva_fecha_pedido, $nueva_hora_pedido);
		$this->empleados=$this->gestionModificarPedido->get_lista_empleados();
	}
	
	//___CONFIRMAR MODIFICAR PEDIDO__
	public function confirmarModificarPedido($nuevo_empleado){
		$this->gestionModificarPedido->confirmar($nuevo_empleado);
		unset($this->gestionModificarPedido);
		$this->vaciarVariables();
		return true;		
	}


//_____________________ELIMINAR PEDIDO__________________________________
	
	//___PRIMERA ETAPA DE ELIMINAR PEDIDO___
	public function eliminarPedido($id_busqueda,$tipo_de_dato,  $fecha_pedido, $hora_pedido){  // [nro_pedido, nro_usuario, dni_usuario]
		$this->gestionEliminarPedido=new Eliminar_Pedido($id_busqueda,$tipo_de_dato,  $fecha_pedido, $hora_pedido);
		$this->pedido=$this->gestionEliminarPedido->get_pedido();
		$this->usuario=$this->gestionEliminarPedido->get_usuario();
		$this->empleado=$this->gestionEliminarPedido->get_empleado();
		return (isset($this->pedido)&&isset($this->usuario)&&isset($this->empleado)) ? true : false;
	}
	
	public function eliminarUsuario($id_busqueda,$tipo_de_dato){ //tipo_de_dato=[nro_usuario/dni_usuario]
		$this->gestionUsuario=new EliminarUsuario($id_busqueda,$tipo_de_dato);
		$this->usuario=$this->gestionUsuario->get_usuario();
		return isset($this->usuario);
	}
	
	//___CONFIRMAR ELIMINAR PEDIDO__
	public function confirmarEliminarPedido(){
		$this->gestionEliminarPedido->confirmar();
		unset($this->gestionEliminarPedido);
		$this->vaciarVariables();
		return true;
	}	


//_____________________GESTION DE USUARIOS_______________________________

	//_____________________CREAR_______________________
	public function agregarUsuario($nombre_usuario, $apellido_usuario, $fecha_nacimiento, $dni_usuario, $direccion_usuario, $direccion_coordenadas){
		$this->gestionUsuario= new NuevoUsuario($nombre_usuario, $apellido_usuario, $fecha_nacimiento, $dni_usuario, $direccion_usuario, $direccion_coordenadas);
		$nro_usuario_nuevo=$this->gestionUsuario->get_nro_usuario();
		unset($this->gestionUsuario);
		return $nro_usuario_nuevo;
	}

	public function agregarEmpleado($nombre_empleado, $apellido_empleado, $dni_empleado, $especialidad, $sucursal, $transporte, $direccion, $coordenadas){
		$this->gestionEmpleado= new NuevoEmpleado($nombre_empleado, $apellido_empleado, $dni_empleado, $especialidad, $sucursal, $transporte, $direccion, $coordenadas);
		$nro_empleado_nuevo=$this->gestionEmpleado->get_nro_empleado();
		unset($this->gestionEmpleado);
		return $nro_empleado_nuevo;
	}

	public function agregarUserPc($nombre_userPc, $apellido_userPc, $dni_userPc, $mail_userPc, $pass_userPc, $rol_userPc){
		$this->gestionUserPc= new NuevoUserPc($nombre_userPc, $apellido_userPc, $dni_userPc, $mail_userPc, $pass_userPc, $rol_userPc);
		$nro_userPc_nuevo=$this->gestionUserPc->get_nro_userPc();
		unset($this->gestionUserPc);
		return $nro_userPc_nuevo;
	}

	//_____________________ELIMINAR_______________________


	//___PRIMERA ETAPA DE ELIMINAR USUARIO___
	public function eliminarUsuario($id_busqueda,$tipo_de_dato){ //tipo_de_dato=[nro_usuario/dni_usuario]
		$this->gestionUsuario=new EliminarUsuario($id_busqueda,$tipo_de_dato);
		$this->usuario=$this->gestionUsuario->get_usuario();
		return isset($this->usuario);
	}
	
	//___CONFIRMAR ELIMINAR USUARIO___
	public function confirmarEliminarUsuario(){
		if ($this->usuario){
			$this->gestionUsuario->confirmar();
			$this->vaciarVariables();
			unset($this->gestionUsuario);
			return true;
		}else{
			return false;
		}
	}
	
	//___PRIMERA ETAPA DE ELIMINAR EMPLEADO___
	public function eliminarEmpleado($id_busqueda,$tipo_de_dato){//tipo_de_dato=[nro_empleado/dni_empleado]
		$this->gestionEmpleado=new EliminarEmpleado($id_busqueda,$tipo_de_dato);
		$this->empleado=$this->gestionEmpleado->get_empleado();
		return isset($this->empleado);
	}
	
	//___CONFIRMAR ELIMINAR EMPLEADO___
	public function confirmarEliminarEmpleado(){
		if ($this->empleado){
			$this->gestionEmpleado->confirmar();
			$this->vaciarVariables();
			unset($this->gestionEmpleado);
			return true;
		}else{
			return false;
		}
	}
	
	//___PRIMERA ETAPA DE ELIMINAR UserPc___
	public function eliminarUserPc($id_busqueda,$tipo_de_dato){//tipo_de_dato=[dni_userPc/nro_userPc]
		$this->gestionUserPc=new EliminarUserPc($id_busqueda,$tipo_de_dato);
		$this->userPc=$this->gestionUserPc->get_userPc();
		return isset($this->userPc);
	}
	
	//___CONFIRMAR ELIMINAR UserPc___
	public function confirmarEliminarUserPc(){
		if ($this->userPc){
			$this->gestionUserPc->confirmar();
			$this->vaciarVariables();
			unset($this->gestionUserPc);
			return true;
		}else{
			return false;
		}
	}
	
	private function vaciarVariables(){
		unset($this->usuario);
		unset($this->empleado);
		unset($this->empleados);
		unset($this->fecha_pedido);
		unset($this->hora_pedido);
	}
}
?>

